package main

import (
	"fmt"
	"sync"
	"time"
)

/*
1. 按理说，最后结果是0
2. 实际结果不是0 每次结果运行结果不一样


*/
var total int
var wg sync.WaitGroup

// 互斥锁 读写锁 同步数据，能不用锁就别用锁 - 性能问题
// 绝大数的web 系统来说 都是读多写少
// 有1w个人同时读取数据库 A读的时候 B能读吗？
// 并发严重下降，

var rwLock sync.RWMutex

func read() {
	defer wg.Done()
	rwLock.RLock()
	fmt.Println("开始读取数据")
	time.Sleep(time.Second * 10)
	fmt.Println("读取成功")
	rwLock.RUnlock()
}

func write() {
	defer wg.Done()
	rwLock.Lock()
	fmt.Println("开始修改数据")
	time.Sleep(time.Second * 10)
	fmt.Println("修改成功")
	rwLock.Unlock()
}

func main() {

	for i := 0; i < 5; i++ {
		wg.Add(1)
		go read()
	}
	for i := 0; i < 1; i++ {
		wg.Add(1)
		go write()
	}

	wg.Wait()
	fmt.Println(total)
}

// 只要开始写数据了
// 读锁就会受影响
// 当写结束后，会执行后面的读锁
